home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Apple II Magazines (DO)
/
Nibble Volume 10, No. 01 (1989-01)(MicroSPARC)(Side B).zip
/
Nibble Volume 10, No. 01 (1989-01)(MicroSPARC)(Side B).do
/
TRANS.S
< prev
next >
Wrap
Text File
|
1996-12-24
|
9KB
|
410 lines
*
* TRANS Source Code
* By Jenny Schmidt
* Copyright(c) 1988
* MicroSPARC, Inc.
* Concord, MA 01742
*
* Assembler: The Assembler
*
CHRGOT EQU $B7 ;FETCH CHAR AT TXTPTR
CHKCOM EQU $DEBE ;CHECK FOR COMMA AND ADVANCE TXTPTR
COMBYTE EQU $E74C ;CHECK COMMA, FETCH INTEGER
HPLOT EQU $F457 ;HI-RES ROUTINES
PLOT EQU $F45A
HPOSN EQU $F411
HLINE EQU $F53A
HCOLOR EQU $F6F0
BASE EQU $26 ;BASE ADDRESS OF HI-RES COORDINATES
BITPOS EQU $30 ;BIT ON HI-RES SCREEN OF COORDINATES
INCRX EQU $F48A ;MOVE ONE COORDINATE IN X DIRECTION
FDIVT EQU $EA69
FACTOARG EQU $EB63
MEMTOFAC EQU $EAF9 ;MOVE FLOATING POINT NUMBER TO FAC
FACTOMEM EQU $EB2B ;MOVE FAC TO MEMORY
COS EQU $EFEA ;COSINE FUNCTION
SIN EQU $EFF1 ;SINE FUNCTION
FRMEVL EQU $DD7B ;EVALUATE FORMULA AT TXTPTR
FMUL EQU $E97F ;MULTIPLY ROUTINE
FADD EQU $E7BE ;ADD ROUTINE
FSUB EQU $E7A7 ;SUBTRACT ROUTINE
FLOAT EQU $E2F2 ;MOVE SIGNED INTEGER TO FAC
FLOATBYTE EQU $E301 ;MOVE INTEGER BYTE TO FAC
GETADR EQU $E752 ;CONVERT FAC TO INTEGER
LINNUM EQU $50 ;RESULT OF GETADR
INT EQU $EBF2
NUM EQU $A0 ;RESULT OF INT. HIGH BYTE FIRST
*
ORG $800
JSR CHKCOM ;GET CALL PARAMETERS
JSR FRMEVL
JSR INT
LDA NUM
STA X1+1
LDA NUM+1
STA X1
JSR CHKCOM
JSR FRMEVL
JSR INT
LDA NUM
STA Y1+1
LDA NUM+1
STA Y1
JSR CHKCOM
JSR FRMEVL
JSR INT
LDA NUM
STA X2+1
LDA NUM+1
STA X2
JSR CHKCOM
JSR FRMEVL
JSR INT
LDA NUM
STA Y2+1
LDA NUM+1
STA Y2
JSR CHKCOM
JSR FRMEVL
JSR INT
LDA NUM
STA X3+1
LDA NUM+1
STA X3
JSR CHKCOM
JSR FRMEVL
JSR INT
LDA NUM
STA Y3+1
LDA NUM+1
STA Y3
JSR CHKCOM
JSR FRMEVL
JSR INT
LDA NUM
STA X4+1
LDA NUM+1
STA X4
JSR CHKCOM
JSR FRMEVL
JSR INT
LDA NUM
STA Y4+1
LDA NUM+1
STA Y4
JSR CHKCOM
JSR FRMEVL
LDX #SCALEX
LDY #SCALEX/
JSR FACTOMEM
JSR CHKCOM
JSR FRMEVL
LDX #SCALEY
LDY #SCALEY/
JSR FACTOMEM
JSR CHKCOM
JSR FRMEVL
LDX #COSOFANG
LDY #COSOFANG/
JSR FACTOMEM
JSR CHKCOM
JSR FRMEVL
LDX #SINOFANG
LDY #SINOFANG/
JSR FACTOMEM
JSR COMBYTE
STX FLAG
LDA Y1 ;COPY CONTENTS OF INITIAL BOX TO PAGE 2
STA YTEMP
LDY #0
LDA X2+1
BEQ NOHI
LDY #36
NOHI LDA X2
SEC
DLOOP SBC #7
INY
BCS DLOOP
STY XTEMP
TLOOP LDX X1
LDY X1+1
LDA YTEMP
JSR HPOSN
T1LOOP LDA (BASE),Y
PHA
LDA BASE+1
EOR #$60
STA BASE+1
PLA
STA (BASE),Y
INY
LDA BASE+1
EOR #$60
STA BASE+1
CPY XTEMP
BCC T1LOOP
INC YTEMP
LDA Y2
CMP YTEMP
BCS TLOOP
LDA Y1
STA YTEMP
JSR COMBYTE ;MOVE OR COPY?
TXA
BEQ COPY
LDX #0 ;IF MOVE THEN ERASE CONTENTS OF SOURCE BOX ON PAGE 1
JSR HCOLOR
T2LOOP LDX X1
LDY X1+1
LDA YTEMP
JSR HPOSN
LDA X2
LDX X2+1
LDY YTEMP
JSR HLINE
INC YTEMP
LDA Y2
CMP YTEMP
BCS T2LOOP
COPY LDA X3
STA XTEMP
LDA X3+1
STA XTEMP+1
LDA Y3
STA YTEMP
LDA Y3+1
STA YTEMP+1
XLOOP LDA XTEMP ;FOR I=X3 TO X4
SEC
SBC X3
TAY
LDA XTEMP+1
SBC X3+1
JSR FLOAT ;CALCULATE (XTEMP-X3)*SCALEX+X1
LDY #SCALEX/
LDA #SCALEX
JSR FMUL
JSR INT
LDA NUM+1
CLC
ADC X1
STA XNEW
STA XTEMP2
LDA NUM
ADC X1+1
STA XNEW+1
STA XTEMP2+1
YLOOP LDA YTEMP ;FORJ=Y3TOY4
SEC
SBC Y3
TAY
LDA YTEMP+1
SBC Y3+1
JSR FLOAT ;CALCULATE (YTEMP-Y3)*SCALEY+Y1
LDY #SCALEY/
LDA #SCALEY
JSR FMUL
JSR INT
LDA NUM+1
CLC
ADC Y1
STA YNEW
LDA #0
STA YNEW+1
BIT FLAG
BMI SCREEN1
LDX XNEW ;BLACK AND WHITE SCREEN FUNCTION
LDY XNEW+1
LDA YNEW
JSR HPOSN
LDA BASE+1
EOR #$60
STA BASE+1
LDA (BASE),Y
AND BITPOS
AND #$7F
BEQ BLACK
LDA (BASE),Y
BPL NOHI1
LDX #7
BNE NOBLACK
NOHI1 LDX #3
BNE NOBLACK
SCREEN1 STA TEMP1 ;COLOR SCREEN FUNCTION
STA TEMP1+1
LDA XNEW
AND #$FE
TAX
LDY XNEW+1
LDA YNEW
JSR HPOSN
LDA BASE+1
EOR #$60
STA BASE+1
LDA (BASE),Y
AND BITPOS
AND #$7F
BEQ OFF
SEC
ROL TEMP1
OFF LDA (BASE),Y
BPL NOHI2
LDA #4
STA TEMP1+1
NOHI2 JSR INCRX
LDA (BASE),Y
AND BITPOS
AND #$7F
CLC
BEQ SKIP
SEC
SKIP ROL TEMP1
LDA (BASE),Y
BPL DONE
LDA #4
STA TEMP1+1
DONE LDA TEMP1
ORA TEMP1+1
TAX
AND #03
BNE NOBLACK
BLACK JMP NEXT
NOBLACK JSR HCOLOR ;COLOR=SCREEN(XNEW,YNEW)
;XNEW=(XTEMP-X3)*COS(ANGLE)-(YTEMP-Y3)*SIN(ANGLE)/ASPECT+X3
;YNEW=(YTEMP-Y3)*COS(ANGLE)-(XTEMP-X3)*SIN(ANGLE)*ASPECT+Y3
LDA XTEMP
SEC
SBC X3
STA XNEW
LDA XTEMP+1
SBC X3+1
STA XNEW+1
LDA YTEMP
SEC
SBC Y3
STA YNEW
LDA YTEMP+1
SBC Y3+1
STA YNEW+1
LDY XNEW
LDA XNEW+1
JSR FLOAT
LDA #COSOFANG
LDY #COSOFANG/
JSR FMUL
LDX #TEMP1
LDY #TEMP1/
JSR FACTOMEM
LDY YNEW
LDA YNEW+1
JSR FLOAT
LDA #SINOFANG
LDY #SINOFANG/
JSR FMUL
LDA #TEMP1
LDY #TEMP1/
JSR FSUB
LDX #XFP
LDY #XFP/
JSR FACTOMEM
LDY YNEW
LDA YNEW+1
JSR FLOAT
LDA #COSOFANG
LDY #COSOFANG/
JSR FMUL
LDX #TEMP1
LDY #TEMP1/
JSR FACTOMEM
LDY XNEW
LDA XNEW+1
JSR FLOAT
LDA #SINOFANG
LDY #SINOFANG/
JSR FMUL
LDA #TEMP1
LDY #TEMP1/
JSR FADD
JSR INT
LDA NUM+1
CLC
ADC Y3
STA YNEW
LDA NUM
ADC Y3+1
BNE NEXT
LDA YNEW
CMP #192
BCS NEXT
LDA #XFP
LDY #XFP/
JSR MEMTOFAC
JSR INT
LDA NUM+1
CLC
ADC X3
STA XNEW
LDA NUM
ADC X3+1
STA XNEW+1
BEQ PLOTIT
CMP #2
BCS NEXT
LDA XNEW
CMP #24
BCS NEXT
PLOTIT LDX XNEW
LDY XNEW+1
LDA YNEW
JSR HPLOT
NEXT LDA YTEMP+1 ;NEXT J
CMP Y4+1
BNE NY
LDA YTEMP
CMP Y4
BEQ NEXT1
NY INC YTEMP
BNE SKIP1
INC YTEMP+1
SKIP1 LDA XTEMP2
STA XNEW
LDA XTEMP2+1
STA XNEW+1
JMP YLOOP
NEXT1 LDA XTEMP+1 ;NEXT I
CMP X4+1
BNE NX
LDA XTEMP
CMP X4
BEQ RETURN
NX INC XTEMP
BNE SKIP2
INC XTEMP+1
SKIP2 LDA Y3
STA YTEMP
LDA Y3+1
STA YTEMP+1
JMP XLOOP
RETURN JSR CHRGOT
RTS
X1 DFS 2
Y1 DFS 2
X2 DFS 2
Y2 DFS 2
X3 DFS 2
Y3 DFS 2
X4 DFS 2
Y4 DFS 2
TEMP1 DFS 5
XFP DFS 5
XNEW DFS 2
YNEW DFS 2
COSOFANG DFS 5
SINOFANG DFS 5
XTEMP DFS 2
YTEMP DFS 2
XTEMP2 DFS 2
SCALEX DFS 5
SCALEY DFS 5
FLAG DFS 1